#include "ztools/tools_list.h"
#include "ztools/tools_vector.h"
#include "ztools/tools_tree.h"

#include <climits>
#include <cmath>
#include <unistd.h>
using namespace std;
#include <fstream>
using std::ifstream;
#include <iostream>
using std::swap;
using std::cout;
using std::cin;
using std::endl;
using std::islower;
using std::isupper;
using std::isalpha;
using std::isdigit;

#include <vector>
using std::vector;
#include <string>
using std::string;
using std::to_string;
#include <queue>
using std::queue;
using std::priority_queue;
#include <list>
using std::list;
#include <unordered_set>
using std::unordered_set;
#include <set>
using std::set;
#include <unordered_map>
using std::unordered_map;
using std::pair;
#include <map>
using std::map;
#include <stack>
using std::stack;
#include <queue>
using std::queue;
#include <set>
using std::set;

#include <algorithm>
using std::sort;
using std::max;
using std::min;

// #include <limits.h>
// // INT_MIN, INT_MAX

// template <class T>
// void show(T t){
//     cout << t << endl;
// }

// /* vector */
// template <class T>
// void show(list<T> v){
//     for(auto i: v)
//         cout << i << " ";
//     cout << endl;
// }
// template <class T>
// void show(vector<T> v){
//     for(int i = 0; i < v.size(); ++i)
//         cout << v[i] << " ";
//     cout << endl;
// }
// template <class T>
// void show(vector<vector<T>> vv){
//     for (int i = 0; i < vv.size(); ++i)
//         show(vv[i]);
// }




// /* list */

// vector<vector<int>> read_vv(string file_name){
//     ifstream file(file_name);
//     vector<vector<int>> vv;
//     string line;
//     int n = INT_MIN;
//     while(getline(file, line)){
//         vector<int> v;
//         for(int i = 0; i < line.size(); ++i){
//             if (line[i] != ' '){
//                 n = n * 10 + (line[i] - '0');
//                 continue;
//             }
//             if( line[i] == ' ' && n != INT_MIN){
//                 // cout << n << endl;
//                 v.push_back(n);
//                 n = INT_MIN;
//             }
//         }
//         v.push_back(n);
//         n = INT_MIN;

//         vv.push_back(v);
//     }
//     return vv;
// }